home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The 640 MEG Shareware Studio 2
/
The 640 Meg Shareware Studio CD-ROM Volume II (Data Express)(1993).ISO
/
basic
/
basfrm13.zip
/
PC-MAZE.NEW
< prev
next >
Wrap
Text File
|
1992-07-04
|
8KB
|
373 lines
' This file was converted by the DavisWARE Basic Formatter Version 1.2
' (C) Copyright 1992 - James R. Davis - All Rights Reserved
' [The UNREGISTERED Software Version!]
' PC-MAZE - MODIFIED FOR EASIER USE ON THE IBM-PC
' BY JAMES R. DAVIS
KEY OFF
Lab40:
CLEAR, , 20000
SCREEN 0
WIDTH 40
CLS
GOTO Lab450
Lab70:
N% = 2
A% = H%
B% = V%
Ff% = 2 ^ (F% - 1)
SCREEN 1
COLOR 0, 1
CLS
Lab90:
Z% = M%(A%, B%) * Ff%
IF FN M%(Z% / 16) = 0 THEN Lab130
Rl% = -1
GOSUB Lab390
GOTO Lab160
Lab130:
W% = M%(A% + S%, B% - R%) * Ff%
IF FN M%(W% / 128) = 0 THEN Lab160
Rl% = -1
GOSUB Lab340
Lab160:
IF FN M%(Z% / 64) = 0 THEN Lab190
Rl% = 1
GOSUB Lab390
GOTO Lab220
Lab190:
W% = M%(A% - S%, B% + R%) * Ff%
IF FN M%(W% / 128) = 0 THEN Lab220
Rl% = 1
GOSUB Lab340
Lab220:
IF FN M%(Z% / 128) = 1 THEN Lab260
N% = N% + 1
IF N% > 8 THEN Lab270
A% = A% + R%
B% = B% + S%
IF B% < 2 THEN Lab270
GOTO Lab90
Lab260:
GOSUB Lab280
Lab270:
RETURN
Lab280:
PSET (Vx% + Dx%(N%), Yu%(N%)), 2
LINE (Vx% + Dx%(N%), Yu%(N%)) - (Vx% + Dx%(N%), Yd%(N%)), 2
LINE (Vx% + Dx%(N%), Yd%(N%)) - (Vx% - Dx%(N%), Yd%(N%)), 2
LINE (Vx% - Dx%(N%), Yd%(N%)) - (Vx% - Dx%(N%), Yu%(N%)), 2
LINE (Vx% - Dx%(N%), Yu%(N%)) - (Vx% + Dx%(N%), Yu%(N%)), 2
RETURN
Lab340:
PSET (Vx% + Rl% * Dx%(N% - 1), Yu%(N%)), 2
LINE (Vx% + Rl% * Dx%(N% - 1), Yu%(N%)) - (Vx% + Rl% * Dx%(N%), Yu%(N%)), 2
LINE (Vx% + Rl% * Dx%(N%), Yu%(N%)) - (Vx% + Rl% * Dx%(N%), Yd%(N%)), 2
LINE (Vx% + Rl% * Dx%(N%), Yd%(N%)) - (Vx% + Rl% * Dx%(N% - 1), Yd%(N%)), 2
RETURN
Lab390:
PSET(Vx% + Rl% * Dx%(N% - 1), Yu%(N% - 1)), 2
LINE (Vx% + Rl% * Dx%(N% - 1), Yu%(N% - 1)) - (Vx% + Rl% * Dx%(N%), Yu%(N%)), 2
LINE (Vx% + Rl% * Dx%(N%), Yu%(N%)) - (Vx% + Rl% * Dx%(N%), Yd%(N%)), 2
LINE (Vx% + Rl% * Dx%(N%), Yd%(N%)) - (Vx% + Rl% * Dx%(N% - 1), Yd%(N% - 1)), 2
IF N% > 2 THEN LINE (Vx% + Rl% * Dx%(N% - 1), Yd%(N% - 1)) - (Vx% + Rl% * Dx%(N% - 1), Yu%(N% - 1)), 2
RETURN
Lab450:
CLS
COLOR 9, 0
LOCATE 6, 12
PRINT "YOU ARE THE RAT!"
PRINT
LOCATE 4, 4
PRINT "A DIFFERENT PERSPECTIVE ON MAZES."
Ch% = 0
PRINT
LOCATE 1, 1
PRINT "FROM THE COMPUSERVE APPLE USER'S GROUP"
LOCATE 2, 9
PRINT "PUBLIC ACCESS DATABASE"
LOCATE 17, 1
PRINT "----------------------------------------"
LOCATE 18, 9
PRINT "USE <- AND -> TO TURN"
PRINT
LOCATE 19, 6
PRINT "<SPACE BAR> TO MOVE FORWARD"
PRINT
LOCATE 20, 3
PRINT "<ESCAPE> FOR A TOP VIEW (TO CHEAT)"
DEF FN M%(X%) = INT(X%) - INT(INT(X%) / 2) * 2
Lab540:
LOCATE 15, 1
Fx% = 36
INPUT "PLEASE ENTER MAZE SIZE (H,V) "; H%, V%
H% = INT(H%)
V% = INT(V%)
IF H% > 2 AND H% < 51 AND V% > 2 AND V% < 51 THEN Lab580
PRINT "2<H<51 -- 2<V<51"
GOTO Lab540
Lab580:
N% = H% * V% - 1
H% = H% + 1
V% = V% + 1
D% = 1
DIM M%(52, 52), W%(400)
FOR J% = 1 TO V% + 1
M%(1, J%) = 4
M%(H% + 1, J%) = 1
NEXT J%
Mx% = 278
My% = 190
Vx% = INT(Mx% / 2)
Vy% = INT(My% / 2)
X% = Vx%
FOR J% = 1 TO 8
Dx%(J%) = X%
Yu%(J%) = INT(Vy% - X% * Vy% / Vx%)
Yd%(J%) = INT(Vy% + X% * (My% - Vy%) / Vx%)
X% = INT(X% * 7 / 10)
NEXT J%
FOR I% = 2 TO H%
M%(I%, V% + 1) = 8
M%(I%, 1) = 2
FOR J% = 2 TO V%
M%(I%, J%) = 15
NEXT J%, I%
R% = INT(H% / 2 + 1)
S% = INT(V% / 2 + 1)
M%(R%, S%) = 15
COLOR 23
PRINT " GENERATING MAZE."
COLOR 9
FOR Iw% = 1 TO N%
Lab710:
I% = 0
IF M%(R% - 1, S%) < 15 THEN Lab740
I% = I% + 1
C%(I%) = 1
Lab740:
IF M%(R%, S% - 1) < 15 THEN Lab760
I% = I% + 1
C%(I%) = 2
Lab760:
IF M%(R% + 1, S%) < 15 THEN Lab780
I% = I% + 1
C%(I%) = 3
Lab780:
IF M%(R%, S% + 1) < 15 THEN Lab800
I% = I% + 1
C%(I%) = 4
Lab800:
IF I% = 0 THEN Lab990
IF I% <> 1 THEN I% = INT(RND(TIMER) * I%) + 1
ON C%(I%) GOTO Lab830, Lab870, Lab910, Lab950
Lab830:
M%(R%, S%) = M%(R%, S%) - FN M%(M%(R%, S%))
R% = R% - 1
M%(R%, S%) = M%(R%, S%) - FN M%(M%(R%, S%) / 4) * 4
GOTO Lab1100
Lab870:
M%(R%, S%) = M%(R%, S%) - FN M%(M%(R%, S%) / 8) * 8
S% = S% - 1
M%(R%, S%) = M%(R%, S%) - FN M%(M%(R%, S%) / 2) * 2
GOTO Lab1100
Lab910:
M%(R%, S%) = M%(R%, S%) - FN M%(M%(R%, S%) / 4) * 4
R% = R% + 1
M%(R%, S%) = M%(R%, S%) - FN M%(M%(R%, S%))
GOTO Lab1100
Lab950:
M%(R%, S%) = M%(R%, S%) - FN M%(M%(R%, S%) / 2) * 2
S% = S% + 1
M%(R%, S%) = M%(R%, S%) - FN M%(M%(R%, S%) / 8) * 8
GOTO Lab1100
Lab990:
IF D% = -1 THEN Lab1030
IF R% <> H% THEN Lab1070
IF S% <> V% THEN Lab1060
R% = 2
S% = 2
GOTO Lab1080
Lab1030:
IF R% <> 2 THEN Lab1070
IF S% <> V% THEN Lab1060
R% = H%
S% = 2
GOTO Lab1080
Lab1060:
S% = S% + 1
D% = -D%
GOTO Lab1080
Lab1070:
R% = R% + D%
Lab1080:
IF M%(R%, S%) = 15 THEN Lab990
GOTO Lab710
Lab1100:
NEXT Iw%
Mh% = H%
Mv% = V%
I% = INT(RND(TIMER) * (Mh% - 1)) + 2
M%(I%, 1) = 0
M%(I%, 2) = M%(I%, 2) - FN M%(M%(I%, 2) / 8) * 8
H% = INT(RND(TIMER) * (Mh% - 1)) + 2
H1% = H%
V1% = V%
COLOR 23
LOCATE 23, 12
PRINT "MAZE COMPLETED."
COLOR 9
GOTO Lab1390
Lab1190:
Hz% = INT(Mx% / Mh%)
Vz% = INT(My% / Mv%)
Ch% = Ch% + 1
SCREEN 1
COLOR 0, 1
CLS
PSET (1 + Hz%, 1 + Vz%), 2
LINE (1 + Hz%, 1 + Vz%) - (1 + Hz%, Mv% * Vz% + 1), 2
FOR J% = 1 TO Mv%
FOR I% = 2 TO Mh%
N% = M%(I%, J%)
X% = I% * Hz% + 1
Y% = J% * Vz% + 1
IF FN M%(N% / 2) = 0 THEN Lab1290
PSET (X%, Y%), 2
LINE (X%, Y%) - (X% - Hz%, Y%), 2
Lab1290:
IF FN M%(N% / 4) = 0 THEN Lab1320
PSET (X%, Y%), 2
LINE (X%, Y%) - (X%, Y% - Vz%), 2
Lab1320:
NEXT I%, J%
X% = H% * Hz% - 1
Y% = V% * Vz% - 1
PSET (X% + 1, Y% + 1), 2
LINE (X% + 1, Y% + 1) - (X% - Hz% + 2, Y% - Vz% + 2), 2
PSET (X% - Hz% + 2, Y% + 1), 2
LINE (X% - Hz% + 2, Y% + 1) - (X% + 1, Y% - Vz% + 2), 2
RETURN
Lab1390:
FOR X% = 1 TO Mh%
FOR Y% = 1 TO Mv%
M%(X%, Y%) = M%(X%, Y%) + M%(X%, Y%) * 16
NEXT Y%, X%
F% = INT(RND(TIMER) * 4) + 1
ON F% GOTO Lab1440, Lab1450, Lab1460, Lab1470
Lab1440:
R% = 0
S% = -1
GOTO Lab1480
Lab1450:
R% = 1
S% = 0
GOTO Lab1480
Lab1460:
R% = 0
S% = 1
GOTO Lab1480
Lab1470:
R% = -1
S% = 0
Lab1480:
GOSUB Lab70
Lab1490:
DEF SEG
POKE 106, 0
Lab1500:
Ik$ = INKEY$
'KEY(12) ON
'KEY(13) ON
IF Ik$ = CHR$(0) + CHR$(75) THEN GOSUB Lab1580
IF Ik$ = CHR$(0) + CHR$(77) THEN GOSUB Lab1600
IF Ik$ = " " THEN Lab1660
IF Ik$ = CHR$(27) THEN Lab1770
GOTO Lab1500
Lab1580:
F% = F% - 1
IF F% < 1 THEN F% = 4
GOTO Lab1610
Lab1600:
F% = F% + 1
IF F% > 4 THEN F% = 1
Lab1610:
ON F% GOTO Lab1620, Lab1630, Lab1640, Lab1650
Lab1620:
R% = 0
S% = -1
GOTO Lab1750
Lab1630:
R% = 1
S% = 0
GOTO Lab1750
Lab1640:
R% = 0
S% = 1
GOTO Lab1750
Lab1650:
R% = -1
S% = 0
GOTO Lab1750
Lab1660:
Z% = M%(H%, V%)
T% = Z% * 2 ^ (F% - 1)
T% = FN M%(T% / 128)
IF T% = 0 THEN Lab1700
GOTO Lab1490
Lab1700:
Nm% = Nm% + 1
LOCATE 22, 24
PRINT "MOVE "; Nm%
FOR Q% = 1 TO 500
NEXT
IF Nm% < 400 THEN W%(Nm%) = F%
H% = H% + R%
V% = V% + S%
IF V% < 2 THEN Lab1790
Lab1750:
GOSUB Lab70
GOTO Lab1490
Lab1770:
GOSUB Lab1190
GOTO Lab1490
Lab1790:
CLS
LOCATE 12, 5
PRINT "CONGRATS, IT TOOK YOU "; Nm%; " STEPS."
IF Ch% = 1 THEN
LOCATE 14, 8
PRINT "(BUT YOU CHEATED ONCE.)"
END IF
IF Ch% > 1 THEN
LOCATE 14, 6
PRINT " (BUT YOU CHEATED "; Ch%; " TIMES.)"
END IF
FOR I% = 1 TO 5000
NEXT
V% = V1%
H% = H1%
GOSUB Lab1190
X% = INT(H% * Hz% - Hz% / 2) + 1
Y% = INT(V% * Vz% - Vz% / 2) + 1
PSET (X%, Y%), 1
FOR N% = 1 TO Nm%
IF N% > 400 THEN Lab1950
F% = W%(N%)
IF F% = 1 THEN V% = V% - 1
IF F% = 2 THEN H% = H% + 1
IF F% = 3 THEN V% = V% + 1
IF F% = 4 THEN H% = H% - 1
LINE (X%, Y%) - (INT(H% * Hz% - Hz% / 2) + 1, INT(V% * Vz% - Vz% / 2) + 1), 1
X% = INT(H% * Hz% - Hz% / 2) + 1
Y% = INT(V% * Vz% - Vz% / 2) + 1
Lab1950:
NEXT N%
LOCATE 1, 1
PRINT "PRESS ANY KEY TO CONTINUE"
Lab1970:
Ik$ = INKEY$
IF Ik$ = "" THEN Lab1970
CLEAR
GOTO Lab40